package com.mianyang.zhangsan.common.generator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @author jiangjr
 * @date 2022-10-15
 */
public class MybatisPlusAutoGenerator {
    public static void main(String[] args) {
        // 数据库连接参数
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/security_manager?useUnicode=true&characterEncoding=utf-8&useSSL=false",
                "root", "root")
                .globalConfig(builder -> {
                    // 设置作者
                    builder.author("jiangjr")
                            // 开启 swagger 模式
                            .enableSwagger()
                            // 覆盖已生成文件
                            .fileOverride()
                            // 指定输出目录
                            .outputDir("D:\\我的\\绵阳师范学院\\毕业设计\\代码\\generator");
                })
                .packageConfig(builder -> {
                    // 设置父包名
                    builder.parent("com.mianyang.zhangsan")
                            //.moduleName("") // 设置父包模块名
                            // 设置mapperXml生成路径
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml,
                                    "D:\\我的\\绵阳师范学院\\毕业设计\\代码\\generator\\mappings"));
                })
                .strategyConfig(builder -> {
                    // 设置需要生成的表名，all表示所有
                    builder.addInclude(getTables("all"))
                            // 配置实体类策略
                            .entityBuilder()
                            // 开启实体类lombok注解
                            .enableLombok()
                            //配置controller
                            .controllerBuilder()
                            //开启restController注解
                            .enableRestStyle()
                            // mapper策略：开启Mapper注解
                            .mapperBuilder().enableMapperAnnotation()
                            // 启用 BaseResultMap 生成，启用 BaseColumnList
                            .enableBaseResultMap().enableBaseColumnList();
                })
                // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();

    }

    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
}
